import {
  serverUrl
} from '../../common/utils'
import axios from 'axios'

/** 退出登录并强制刷新页面（会重定向到登录页） */
function logout() {
  // useUserStore().resetToken()
  uni.clearStorageSync()
  uni.reLaunch({
    url: '/pages/home/home'
  })

}

/** 创建请求实例 */
function createInstance() {
  // 创建一个 axios 实例命名为 instance
  const instance = axios.create()
  // 请求拦截器
  instance.interceptors.request.use(
    // 发送之前
    (config) => {
      // const { userInfo, isLogin } = useUserStore()

      // if (isLogin()) {
      //   config.data = Object.assign(config.data, { F_ID: userInfo?.F_ID })
      // }

      return config
    },
    // 发送失败
    (error) => Promise.reject(error),
  )
  // 响应拦截器（可根据具体业务作出相应的调整）
  instance.interceptors.response.use(
    (response) => {
      // apiData 是 api 返回的数据
      const apiData = response.data
      // 二进制数据则直接返回
      const responseType = response.request?.responseType
      if (responseType === 'blob' || responseType === 'arraybuffer') return apiData

      // 这个 code 是和后端约定的业务 code
      const code = apiData.ResultCode
      switch (code) {
        case 1:
          return apiData
        case 401:
          // 登录过期
          return logout()
        default:
          // 不是正确的 code
          return Promise.reject(apiData.ResultMessage)
      }
    },
    (err) => {
      return Promise.reject(err.message)
    },
  )
  return instance
}

/** 创建请求方法 */
function createRequest(instance) {
  return (config) => {
    // 默认配置
    const defaultConfig = {
      // 接口地址
      baseURL: serverUrl,
      // 请求头
      headers: {
        'Content-Type': 'application/json',
      },
      // 请求体
      data: {},
      // 请求超时
      timeout: 5000,
      // 跨域请求时是否携带 Cookies
      withCredentials: false,
    }
    // 将默认配置 defaultConfig 和传入的自定义配置 config 进行合并成为 mergeConfig
    const mergeConfig = Object.assign(defaultConfig, config)
    return instance(mergeConfig)
  }
}

/** 用于请求的实例 */
const instance = createInstance()

/** 用于请求的方法 */
export const http = createRequest(instance)